package com.snow.useviewdemo.function2.spannable

import android.content.Context
import android.graphics.Color
import android.os.Bundle
import android.text.*
import android.text.style.ForegroundColorSpan
import android.text.style.ImageSpan
import android.view.View
import com.snow.useviewdemo.R
import com.snow.useviewdemo.base.BaseKotlinActivity
import kotlinx.android.synthetic.main.layout_test_text_export.*


/**
 * Created by zhaoyingtao
 * Date: 2021/3/7
 * Describe:
 */
class TestTextExportPackUpActivity:BaseKotlinActivity(),View.OnClickListener {
    private val maxLine = 3
    private var elipseString //收起的文字
            : SpannableString? = null
    private var notElipseString //展开的文字
            : SpannableString? = null

    override fun getLayoutId(): Int {
        return R.layout.layout_test_text_export
    }

    override fun setViewData(savedInstanceState: Bundle?) {
//        tv_more_content.setText("据中新视频官方微博消息，3月6日，全国人大代表、山东省荣成市寻山街道青鱼滩村党支部书记李长青谈到如何拉动内需，促消费时表示，建议延长一些节假日或增设法定节假日，恢复小长假，让人们可以有充分的时间旅游、购物，从而拉动消费。")
        tv_more_content.visibility = View.GONE
        etv_tide_content.text =("据中新视频官方微博消息，3月6日，全国人大代表、山东省荣成市寻山街道青鱼滩村党支部书记李长青谈到如何拉动内需，促消费时表示，建议延长一些节假日或增设法定节假日，恢复小长假，让人们可以有充分的时间旅游、购物，从而拉动消费。")
//        dealWithContent()
    }
    fun dealWithContent(){
        val content = """
            在全球，随着Flutter被越来越多的知名公司应用在自己的商业APP中，Flutter这门新技术也逐渐进入了移动开发者的视野，尤其是当Google在2018年IO大会上发布了第一个Preview版本后，国内刮起来一股学习Flutter的热潮。
            
            为了更好的方便帮助中国开发者了解这门新技术，我们，Flutter中文网，前后发起了Flutter翻译计划、Flutter开源计划，前者主要的任务是翻译Flutter官方文档，后者则主要是开发一些常用的包来丰富Flutter生态，帮助开发者提高开发效率。而时至今日，这两件事取得的效果还都不错！
            """.trimIndent()
        tv_content.text = content
        //获取TextView的画笔对象
        val paint: TextPaint = tv_content.paint
        //每行文本的布局宽度
        val width: Int = resources.displayMetrics.widthPixels - dip2px(this, 0f)
        //实例化StaticLayout 传入相应参数
        val staticLayout = StaticLayout(content, paint, width, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false)
        //判断content是行数是否超过最大限制行数3行
        if (staticLayout.lineCount > maxLine) {
            //定义展开后的文本内容
            val string1 = "$content    收起"
            notElipseString = SpannableString(string1)
            //给收起两个字设成蓝色
            notElipseString!!.setSpan(ForegroundColorSpan(Color.parseColor("#0079e2")), string1.length - 2, string1.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            addIcon(notElipseString!!,R.mipmap.icon_text_export)
            //获取到第三行最后一个文字的下标
            val index = staticLayout.getLineStart(maxLine) - 1
            //定义收起后的文本内容
            val substring = content.substring(0, index - 2) + "..." + "更多"
            elipseString = SpannableString(substring)
            addIcon(elipseString!!,R.mipmap.icon_text_pack_up)
            //给查看全部设成蓝色
            elipseString!!.setSpan(ForegroundColorSpan(Color.parseColor("#0079e2")), substring.length - 5, substring.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            //设置收起后的文本内容
            tv_content.text = elipseString
            tv_content.setOnClickListener(this)
            //将textview设成选中状态 true用来表示文本未展示完全的状态,false表示完全展示状态，用于点击时的判断
            tv_content.isSelected = true
        } else {
            //没有超过 直接设置文本
            tv_content.text = content
            tv_content.setOnClickListener(null)
        }
    }
    fun addIcon(spannabe:SpannableString,iconRes: Int) {
        val len:Int = spannabe.length
        //创建ImageSpan对象
        val rightDrawable = resources.getDrawable(iconRes)
        rightDrawable.setBounds(0, 0, 35, 35)
        val imageSpan = ImageSpan(rightDrawable) //能够放在字符串中的图片
        //给SpannableString对象设置ImageSpan
        spannabe.setSpan(imageSpan, len - 1, len, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
    }
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    fun dip2px(mContext: Context, dpValue: Float): Int {
        val scale: Float = mContext.resources.displayMetrics.density
        return (dpValue * scale + 0.5f).toInt()
    }
    override fun onClick(v: View) {
        if (v.getId() === R.id.tv_content) {
            if (v.isSelected()) {
                //如果是收起的状态
                tv_content.setText(notElipseString)
                tv_content.setSelected(false)
            } else {
                //如果是展开的状态
                tv_content.setText(elipseString)
                tv_content.setSelected(true)
            }
        }
    }
}